package br.unisal.view;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.LayoutStyle;
import javax.swing.WindowConstants;

import br.unisal.domain.Produto;
import br.unisal.repository.ProdutoRepository;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class MenuProdutos extends javax.swing.JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JButton botaoVoltar;
	private JTextField campoTextoObs;
	private JTextField campoTextoNome;
	private JLabel labelCodigo;
	private JLabel labelPreco;
	private JLabel labelTipo;
	private JLabel labelObs;
	private JLabel labelNome;
	private JTextArea areaDeTextoParaMenssagens;
	private JRadioButton radioButtonFalse;
	private JRadioButton radioButtonTrue;
	private JLabel labelProdutoDisponivel;
	private JTextField campoTextoCodigo;
	private JTextField campoTextoValor;
	private JTextField campoTextoTipo;
	private JComboBox<Produto> comboboxProdutos;
	private JButton botaoLimparFormulario;
	private JButton botaoCadastrar;
	private JButton botaoEditar;
	private JButton botaoExcluir;
	
	private ProdutoRepository produtoRepository;
	private Produto produtoSelecionado, produtoDigitado;

	public MenuProdutos() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		
		produtoRepository = JanelaPrincipal.getProdutoRepository();
		
		try {	
			GroupLayout thisLayout = new GroupLayout((JComponent)getContentPane());
			getContentPane().setLayout(thisLayout);
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				botaoVoltar = new JButton();
				botaoVoltar.setText("Voltar");
				botaoVoltar.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
					dispose();
						
					}
				});
			}
			{
				Produto[] produtos = produtoRepository.retornaTodosProdutosEmArray();
				ComboBoxModel<Produto> comboboxProdutosModel = 
						new DefaultComboBoxModel<Produto>(produtos);
				comboboxProdutos = new JComboBox<Produto>();
				comboboxProdutos.setModel(comboboxProdutosModel);
				comboboxProdutos.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						produtoSelecionado = (Produto) comboboxProdutos.getSelectedItem();
						campoTextoCodigo.setText(String.valueOf(produtoSelecionado.getCodigo()));
						campoTextoObs.setText(produtoSelecionado.getObs());
						campoTextoTipo.setText(String.valueOf(produtoSelecionado.getTipo()));
						campoTextoValor.setText(String.valueOf(produtoSelecionado.getValor()));
						campoTextoNome.setText(produtoSelecionado.getDescicao());
						if (produtoSelecionado.getDisponivel()) {
							radioButtonTrue.setSelected(true);
						}
						else {
							radioButtonFalse.setSelected(true);
						}
					}
				});
			}
			{
				areaDeTextoParaMenssagens = new JTextArea();
			}
			{
				labelProdutoDisponivel = new JLabel();
				labelProdutoDisponivel.setText("Disponivel");
			}
			{
				campoTextoNome = new JTextField();
			}
			{
				campoTextoObs = new JTextField();
			}
			{
				campoTextoTipo = new JTextField();
			}
			{
				campoTextoValor = new JTextField();
			}
			{
				campoTextoCodigo = new JTextField();
			}
			{
				labelNome = new JLabel();
				labelNome.setText("Nome");
			}
			{
				labelObs = new JLabel();
				labelObs.setText("Obs");
			}
			{
				labelTipo = new JLabel();
				labelTipo.setText("Tipo");
			}
			{
				labelPreco = new JLabel();
				labelPreco.setText("Valor");
			}
			{
				labelCodigo = new JLabel();
				labelCodigo.setText("Codigo");
			}
			{
				ButtonGroup buttonGroupDisponivel = new ButtonGroup();

				radioButtonTrue = new JRadioButton();
				radioButtonTrue.setText("Sim");
				radioButtonTrue.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent e) {
						
					}
				});

				radioButtonFalse = new JRadioButton();
				radioButtonFalse.setText("Nao");
				radioButtonFalse.setSelected(true);
				radioButtonFalse.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent e) {
						
					}
				});
				
				buttonGroupDisponivel.add(radioButtonFalse);
				buttonGroupDisponivel.add(radioButtonTrue);
			}
			{
				botaoCadastrar = new JButton();
				botaoCadastrar.setText("Cadastrar");
				botaoCadastrar.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						areaDeTextoParaMenssagens.setText("");
						String codigoTxt  = campoTextoCodigo.getText();
						String descricao  = campoTextoNome.getText();
						String tipoTxt    = campoTextoTipo.getText();
						String valorTxt   = campoTextoValor.getText();
						String observacao = campoTextoObs.getText();
						Boolean ativo     = radioButtonTrue.isSelected();
						Boolean valores   = false;
						Integer codigo    = 0;
						Integer tipo      = 0;
						Double valor      = 0.0;
						try {
							codigo  = Integer.parseInt(codigoTxt);
							tipo    = Integer.parseInt(tipoTxt); 
							valor   = Double.parseDouble(valorTxt);
							valores = true;
						} catch (Exception e) {
							valores = false;
						}
							
						produtoDigitado = new Produto(codigo, descricao, tipo, observacao, valor, ativo);
						if ( ! produtoRepository.validaCodigo(produtoDigitado.getCodigo()) || ! valores){
							if ( produtoDigitado.validaCampos()){
								produtoRepository.adicionaNovoProduto(produtoDigitado);
								areaDeTextoParaMenssagens.append("Produto Adicionado\n");
								areaDeTextoParaMenssagens.append(produtoDigitado.toString());
								campoTextoCodigo.setText(null);
								campoTextoNome.setText(null);
								campoTextoTipo.setText(null);
								campoTextoValor.setText(null);
								campoTextoObs.setText(null);
								}
							else {
								areaDeTextoParaMenssagens.append("Verificar os dados digitados.\n");
								areaDeTextoParaMenssagens.append(produtoDigitado.toString() + "\n");
							}
						}
						else {
							areaDeTextoParaMenssagens.append("Verificar o codigo usado.\n");
							areaDeTextoParaMenssagens.append(produtoDigitado.toString() + "\n");
						}
						produtoDigitado = null;
					}
				});
			}
			{
				botaoLimparFormulario = new JButton();
				botaoLimparFormulario.setText("Limpar Form");
				botaoLimparFormulario.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						produtoSelecionado = null;
						produtoDigitado = null;
						campoTextoCodigo.setText("");
						campoTextoObs.setText("");
						campoTextoTipo.setText("");
						campoTextoValor.setText("");
						campoTextoNome.setText("");
						radioButtonFalse.setSelected(false);
						areaDeTextoParaMenssagens.setText("");
					}
				});
			}
			{
				botaoExcluir = new JButton();
				botaoExcluir.setText("Excluir");
				botaoExcluir.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						if(produtoSelecionado != null){
						produtoRepository.excluiProduto(produtoSelecionado);
						areaDeTextoParaMenssagens.append("Produto Excluido.\n");
						areaDeTextoParaMenssagens.append(produtoSelecionado + "\n");
						produtoRepository = null;
						} 
						else{
							areaDeTextoParaMenssagens.append("Produto nao selecionado para exclusao.\n");
						}
					}
				});
			}
			{
				botaoEditar = new JButton();
				botaoEditar.setText("Editar");
				botaoEditar.addActionListener(new ActionListener() {
					
					@Override
					public void actionPerformed(ActionEvent arg0) {
						areaDeTextoParaMenssagens.setText("");
						String codigoTxt  = campoTextoCodigo.getText();
						String descricao  = campoTextoNome.getText();
						String tipoTxt    = campoTextoTipo.getText();
						String valorTxt   = campoTextoValor.getText();
						String observacao = campoTextoObs.getText();
						Boolean ativo     = radioButtonTrue.isSelected();
						Boolean valores   = false;
						Integer codigo    = 0;
						Integer tipo      = 0;
						Double valor      = 0.0;
						try {
							codigo  = Integer.parseInt(codigoTxt);
							tipo    = Integer.parseInt(tipoTxt); 
							valor   = Double.parseDouble(valorTxt);
							valores = true;
						} catch (Exception e) {
							valores = false;
						}
						
						produtoDigitado = new Produto(codigo, descricao, tipo, observacao, valor, ativo);
						if ( ! produtoRepository.validaCodigo(produtoDigitado.getCodigo()) || ! valores){
							if ( produtoDigitado.validaCampos()){
								//excluindo
								produtoRepository.excluiProduto(produtoSelecionado);
								produtoSelecionado = null;
								//inserindo
								produtoRepository.adicionaNovoProduto(produtoDigitado);
								areaDeTextoParaMenssagens.append("Produto Editado\n");
								areaDeTextoParaMenssagens.append(produtoDigitado.toString());
								campoTextoCodigo.setText(null);
								campoTextoNome.setText(null);
								campoTextoTipo.setText(null);
								campoTextoValor.setText(null);
								campoTextoObs.setText(null);
								}
							else {
								areaDeTextoParaMenssagens.append("Verificar os dados digitados.\n");
								areaDeTextoParaMenssagens.append(produtoDigitado.toString() + "\n");
							}
						}
						else {
							areaDeTextoParaMenssagens.append("Verificar o codigo usado.\n");
							areaDeTextoParaMenssagens.append(produtoDigitado.toString() + "\n");
						}
						produtoDigitado = null;
					}
				});
			}
			thisLayout.setVerticalGroup(thisLayout.createSequentialGroup()
				.addContainerGap()
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(comboboxProdutos, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(botaoLimparFormulario, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(botaoCadastrar, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(labelNome, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(campoTextoNome, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(botaoEditar, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(labelObs, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(campoTextoObs, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(botaoExcluir, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(labelTipo, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(campoTextoTipo, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(campoTextoValor, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(labelPreco, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(botaoVoltar, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(campoTextoCodigo, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(labelCodigo, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
				.addGroup(thisLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
				    .addComponent(radioButtonTrue, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(labelProdutoDisponivel, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
				    .addComponent(radioButtonFalse, GroupLayout.Alignment.BASELINE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
				.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
				.addComponent(areaDeTextoParaMenssagens, GroupLayout.PREFERRED_SIZE, 63, GroupLayout.PREFERRED_SIZE)
				.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 0, Short.MAX_VALUE));
			thisLayout.setHorizontalGroup(thisLayout.createSequentialGroup()
				.addContainerGap()
				.addGroup(thisLayout.createParallelGroup()
				    .addGroup(thisLayout.createSequentialGroup()
				        .addGroup(thisLayout.createParallelGroup()
				            .addComponent(botaoVoltar, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE)
				            .addComponent(botaoExcluir, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE)
				            .addComponent(botaoEditar, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE)
				            .addComponent(botaoCadastrar, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE)
				            .addComponent(botaoLimparFormulario, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE))
				        .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
				        .addGroup(thisLayout.createParallelGroup()
				            .addGroup(thisLayout.createSequentialGroup()
				                .addComponent(comboboxProdutos, GroupLayout.PREFERRED_SIZE, 238, GroupLayout.PREFERRED_SIZE)
				                .addGap(0, 0, Short.MAX_VALUE))
				            .addGroup(thisLayout.createSequentialGroup()
				                .addGroup(thisLayout.createParallelGroup()
				                    .addComponent(labelProdutoDisponivel, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 85, GroupLayout.PREFERRED_SIZE)
				                    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				                        .addComponent(labelCodigo, GroupLayout.PREFERRED_SIZE, 64, GroupLayout.PREFERRED_SIZE)
				                        .addGap(21))
				                    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				                        .addComponent(labelPreco, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE)
				                        .addGap(37))
				                    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				                        .addComponent(labelNome, GroupLayout.PREFERRED_SIZE, 60, GroupLayout.PREFERRED_SIZE)
				                        .addGap(25))
				                    .addGroup(thisLayout.createSequentialGroup()
				                        .addPreferredGap(labelCodigo, labelTipo, LayoutStyle.ComponentPlacement.INDENT)
				                        .addGroup(thisLayout.createParallelGroup()
				                            .addComponent(labelTipo, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE)
				                            .addComponent(labelObs, GroupLayout.Alignment.LEADING, GroupLayout.PREFERRED_SIZE, 48, GroupLayout.PREFERRED_SIZE))
				                        .addGap(25)))
				                .addGap(7)
				                .addGroup(thisLayout.createParallelGroup()
				                    .addGroup(thisLayout.createSequentialGroup()
				                        .addGap(0, 0, Short.MAX_VALUE)
				                        .addComponent(campoTextoCodigo, GroupLayout.PREFERRED_SIZE, 146, GroupLayout.PREFERRED_SIZE))
				                    .addGroup(thisLayout.createSequentialGroup()
				                        .addGap(0, 0, Short.MAX_VALUE)
				                        .addComponent(campoTextoValor, GroupLayout.PREFERRED_SIZE, 146, GroupLayout.PREFERRED_SIZE))
				                    .addGroup(thisLayout.createSequentialGroup()
				                        .addGap(0, 0, Short.MAX_VALUE)
				                        .addComponent(campoTextoTipo, GroupLayout.PREFERRED_SIZE, 146, GroupLayout.PREFERRED_SIZE))
				                    .addGroup(thisLayout.createSequentialGroup()
				                        .addGap(0, 0, Short.MAX_VALUE)
				                        .addComponent(campoTextoObs, GroupLayout.PREFERRED_SIZE, 146, GroupLayout.PREFERRED_SIZE))
				                    .addGroup(thisLayout.createSequentialGroup()
				                        .addGap(0, 0, Short.MAX_VALUE)
				                        .addComponent(campoTextoNome, GroupLayout.PREFERRED_SIZE, 146, GroupLayout.PREFERRED_SIZE))
				                    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				                        .addGap(16)
				                        .addComponent(radioButtonTrue, GroupLayout.PREFERRED_SIZE, 53, GroupLayout.PREFERRED_SIZE)
				                        .addGap(0, 21, Short.MAX_VALUE)
				                        .addComponent(radioButtonFalse, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE))))))
				    .addGroup(GroupLayout.Alignment.LEADING, thisLayout.createSequentialGroup()
				        .addComponent(areaDeTextoParaMenssagens, GroupLayout.PREFERRED_SIZE, 337, GroupLayout.PREFERRED_SIZE)
				        .addGap(0, 22, Short.MAX_VALUE)))
				.addContainerGap(25, 25));
			pack();
			this.setSize(414, 370);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}

}
